// generator 配合promise的异步方案
function ajax(url) {
    return new Promise(function(resolve, reject) {
        // foo() 可以捕获到异常
        var xhr = new XMLHttpRequest()
        xhr.open('GET',url)
        xhr.responseType = 'json'
        xhr.onload = function() {
            if(this.status === 200) {
                resolve(this.response)
            }else {
                reject(new Error(this.statusText))
            }
        }
        xhr.send()
    }) 
}
// 构造器
function * main () {
    try {
        const users = yield ajax('/api/users.json')
        console.log(users)
        const posts = yield ajax('api/posts/json')
        console.log(posts)
    }catch(e) {
        console.log(e)
    }
}
const g = main()
// const result = g.next()
// // 这里拿到 ajax返回的 promise
// result.value.then( data => {
//     const result2 = g.next(data)
//     if(result2.done) return
//     result2.value.then(data => {
//         const result3 = g.next(data)
//         if(result3.done) return
//         result3.value.then(data => {
//             const result4 = g.next(data)
//         })
//     })
// })

// 更优的异步调用方法
function handleResult (result) {
    if(result.done) return //生成器函数结束
    result.value.then(data=> {
        handleResult(g.next())
    },error=> {
        g.throw(error)
    })
}